package com.ruoyi.web.service;

import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.web.domain.mes.MesFile;
import com.ruoyi.web.mapper.MesFileMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.List;

@Service
public class IMesFileService {
    @Resource
    private MesFileMapper mesFileMapper;

    /**
     * 查询
     *
     * @Date: 2024年1月4日
     * @Auth: 张恒
     */
    public AjaxResult getMesFile(MesFile mesFile) {
        List<MesFile> mesFiles = mesFileMapper.selectMesFile(mesFile);
        return AjaxResult.success(mesFiles);
    }

    /**
     * 新增
     *
     * @Date: 2024年1月4日
     * @Auth: 张恒
     */
    @Transactional
    public AjaxResult addOrEditMesFile(MultipartFile file, Long foreignKey, Integer fileType, Integer isMultiple) {
        String username = SecurityUtils.getUsername();
        Date date = new Date();
        if (ObjectUtils.isEmpty(file) || file.getSize() <= 0) {
            throw new BaseException("未获取到上传的文件【file】");
        }
        if (foreignKey == null || fileType == null) {
            throw new BaseException("未获取到相关信息");
        }
        // 上传
        String upload = "";
        try {
            upload = FileUploadUtils.upload(RuoYiConfig.getUploadPath(), file);
        } catch (IOException e) {
            e.printStackTrace();
            throw new BaseException("附件上传失败：" + e.getMessage());
        }
        if (StringUtils.isBlank(upload)) {
            throw new BaseException("附件上传失败");
        }
        // 获取文件大小
        long size = file.getSize();
        DecimalFormat df = new DecimalFormat("#.00");
        String fileSizeString = null;
        if (size < 1024) {
            fileSizeString = df.format((double) size) + "B";
        } else if (size < 1048576) {
            fileSizeString = df.format((double) size / 1024) + "KB";
        } else if (size < 1073741824) {
            fileSizeString = df.format((double) size / 1048576) + "MB";
        } else {
            fileSizeString = df.format((double) size / 1073741824) + "GB";
        }
        // 上传成功：保存上传的文件
        // 查询是否上传过文件
        MesFile mesFile = new MesFile();
        mesFile.setForeignKey(foreignKey);
        mesFile.setFileType(fileType);
        List<MesFile> mesFiles = mesFileMapper.selectMesFile(mesFile);
        mesFile.setFilePath(upload);
        mesFile.setFileName(file.getOriginalFilename());
        mesFile.setFileSize(fileSizeString);

        if (isMultiple == null) {
            if (mesFiles.size() > 0) {
                // 修改
                mesFile.setId(mesFiles.get(0).getId());
                mesFile.setUpdateBy(username);
                mesFile.setUpdateTime(date);
                mesFileMapper.updateMesFile(mesFile);
            } else {
                // 新增
                mesFile.setCreateBy(username);
                mesFile.setCreateTime(date);
                mesFileMapper.insertMesFile(mesFile);
            }
        } else {
            mesFile.setCreateBy(username);
            mesFile.setCreateTime(date);
            mesFileMapper.insertMesFile(mesFile);
        }

        return AjaxResult.success(mesFile);
    }

    /**
     * 删除
     *
     * @Date: 2024年1月4日
     * @Auth: 张恒
     */
    public AjaxResult delMesFile(MesFile mesFile) {
        // 这两个值不能同时为空
        if (mesFile.getForeignKey() == null && mesFile.getId() == null) {
            throw new BaseException("未获取到删除的信息");
        }
        mesFileMapper.deleteMesFile(mesFile);
        return AjaxResult.success();
    }
}
